Most software development tools such as MICROSOFT® Visual Studio have debuggers that allow the software developer to debug the code and enter, break mode at a particular point in time to watch the code execution more carefully to locate an error. When a debugger breaks into the code in break mode when an exception occurs, it is not very easy to determine what caused the exception because the changes to the data and the path of execution through the application are not remembered by the debugger or the platform. Some debuggers have attempted to solve this problem by just recording every activity that happens during execution, such as recording every data value as it changes and the entire execution path. The problem with such an approach is that there is a huge overhead involved in recording every activity for an entire application as the values change and as every execution path is taken.